//1
package edu.neuq.temp;

import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JTextField;

public class MenuLuncher extends JFrame{//创建JFrame子类，再添加内容——初始化再构造方法里做

 //为什么把控件设置为类的成员变量？——而不是局部变量   后续程序运行，还需要单独访问jmb
	JMenuBar jmb;//窗体的菜单，控件的名字JMenuBar——代表占据上面一整行，而不是一个个菜单
	JMenu jm;//一整行行的菜单Menu
	JMenuItem jmi;//一个菜单栏，还有很多menu，item菜单项构成
	JButton jb;
	JTextField jtf;//成员变量——功能块
	
	
	public MenuLuncher(){
		
		jmb=new JMenuBar();//为每一个对象创建实体——控件
		jm=new JMenu("file");
		jmi=new JMenuItem("save");
		jb=new JButton("button");
		jtf=new JTextField("text input");		
		//JMenuBar jmb=new JMenuBar();
		
		
		jb.addActionListener(new ActionListener(){
			//源是jb,通过addMouseListener联系
			public void actionPerformed(ActionEvent arg0){
				System.out.println("button clicked");
			}
		});
		//接口无法创造接口实例,创造匿名类
		
		jmb.add(jm);
		jm.add(jmi);//add关联功能
		this.setJMenuBar(jmb);//菜单栏放到窗体上时用setJMenuBar,其他所有控件添加都是add
		this.add(jb);
		this.add(jtf);
		
		this.setLayout(new FlowLayout());//布局方式
		
		this.setTitle("this is a frame");//this是指类本身自己，不用也OK
		this.setSize(500,400);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setVisible(true);
	}
	
	public void reText(String s){//方法重新设置文本内容,比较容易访问
		jtf.setText(s);
	}
	
	public static void main(String[] args) {
		new MenuLuncher();
		//main启动窗体,创建一个MenuLuncher实例

	}

}

//2
package edu.neuq.temp;

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.GridLayout;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class LayoutShowLuncher extends JFrame{//创建子类

	public LayoutShowLuncher(){
		
		this.setLayout(new FlowLayout());
		
		this.add(this.getJPanel1());
		this.add(this.getJPanel2());
		this.add(this.getJPanel3());//JFrame接收面板，面板之间默认按照FlowLayout
		//一层一层设计
		
		this.setSize(300,200);
		this.setTitle("eclipse");
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		this.setVisible(true);
		
	}
	
	public JPanel getJPanel1(){
		JPanel jp=new JPanel();
		jp.setLayout(new FlowLayout());
		jp.add(new JButton("button1"));
		jp.add(new JButton("button2"));
		jp.add(new JButton("button3"));//JButton甚至没有创建引用，直接贴到页面上，不会被垃圾回收
		
		return jp;	
	}
	
	public JPanel getJPanel2(){
		JPanel jp=new JPanel();
		jp.setLayout(new GridLayout(3,2));
		jp.add(new JButton("1"));
		jp.add(new JButton("2"));
		jp.add(new JButton("3"));
		jp.add(new JButton("4"));
		jp.add(new JButton("5"));
		jp.add(new JButton("6"));
		
		
		
		return jp;
	}

	public JPanel getJPanel3(){
		JPanel jp=new JPanel();
		jp.setLayout(new BorderLayout());//控件按照东西南北中布局
		jp.add(new JButton("SOUTH"),BorderLayout.SOUTH);
		jp.add(new JButton("NORTH"),BorderLayout.NORTH);
		jp.add(new JButton("EAST"),BorderLayout.EAST);
		jp.add(new JButton("WEST"),BorderLayout.WEST);
		jp.add(new JButton("Okay"),BorderLayout.CENTER);
		return jp;
	}

	
	public static void main(String[] args) {
		new LayoutShowLuncher();
	}

}
